package com.yy.wga.mp.module.pay.client.response.wechat;

import com.alibaba.fastjson.annotation.JSONField;
import com.yy.wga.mp.module.pay.client.response.BaseQueryOrderResponse;
import com.yy.wga.mp.module.pay.client.response.BaseQueryOrderResponse;
import com.yy.wga.mp.module.pay.client.response.BaseQueryOrderResponse;
import com.yy.wga.mp.module.pay.client.response.BaseQueryOrderResponse;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

import java.util.List;

/**
 * @Author: gc
 * @Date: 2021/6/13
 * @Description:
 **/
@EqualsAndHashCode(callSuper = true)
@Data
@ToString(callSuper = true)
public class WechatQueryOrderResponse extends BaseQueryOrderResponse {
    private static final long serialVersionUID = 8273118107201364099L;

    /**
     * 应用ID
     */
    @JSONField(name = "appid")
    private String appId;

    /**
     * 直连商户号
     */
    @JSONField(name = "mchid")
    private String mchId;

    /**
     * 商户订单号
     */
    @JSONField(name = "out_trade_no")
    private String outTradeNo;

    /**
     * 微信支付订单号
     */
    @JSONField(name = "transaction_id")
    private String transactionId;

    /**
     * 交易类型
     * JSAPI：公众号支付
     * NATIVE：扫码支付
     * APP：APP支付
     * MICROPAY：付款码支付
     * MWEB：H5支付
     * FACEPAY：刷脸支付
     */
    /**
     * 交易类型
     */
    @JSONField(name = "trade_type")
    private String tradeType;

    /**
     * 交易状态
     * SUCCESS：支付成功
     * REFUND：转入退款
     * NOTPAY：未支付
     * CLOSED：已关闭
     * REVOKED：已撤销（付款码支付）
     * USERPAYING：用户支付中（付款码支付）
     * PAYERROR：支付失败(其他原因，如银行返回失败)
     * ACCEPT：已接收，等待扣款
     */
    /**
     * 交易状态
     */
    @JSONField(name = "trade_state")
    private String tradeState;

    /**
     * 交易状态描述
     */
    @JSONField(name = "trade_state_desc")
    private String tradeStateDesc;

    /**
     * 类型见https://pay.weixin.qq.com/wiki/doc/apiv3/terms_definition/chapter1_1_3.shtml#part-6
     */
    /**
     * 付款银行
     */
    @JSONField(name = "bank_type")
    private String bankType;

    /**
     * 附加数据
     */
    @JSONField(name = "attach")
    private String attach;

    /**
     * 支付完成时间 格式：YYYY-MM-DDTHH:mm:ss+TIMEZONE
     */
    @JSONField(name = "success_time")
    private String successTime;

    /**
     * 支付者信息
     */
    @JSONField(name = "payer")
    private PayerDto payer;

    /**
     * 订单金额信息，当支付成功时返回该字段。
     */
    @JSONField(name = "amount")
    private PayerDto amount;

    /**
     * 支付场景描述
     */
    @JSONField(name = "scene_info")
    private SceneInfoDto sceneInfo;

    /**
     * 优惠功能，享受优惠时返回该字段
     */
    @JSONField(name = "promotion_detail")
    private PromotionDetailDto promotionDetail;

    @Data
    public static class PayerDto {
        /**
         * 用户标识
         */
        @JSONField(name = "openid")
        private String openId;
    }

    @Data
    public static class AmountDto {
        /**
         * 订单总金额，单位为分
         */
        @JSONField(name = "total")
        private Integer total;

        /**
         * 用户支付金额，单位为分
         */
        @JSONField(name = "payer_total")
        private Integer payerTotal;

        /**
         * 货币类型
         */
        @JSONField(name = "currency")
        private String currency;

        /**
         * 用户支付币种
         */
        @JSONField(name = "payer_currency")
        private String payerCurrency;
    }

    @Data
    public static class SceneInfoDto {
        /**
         * 商户端设备号
         */
        @JSONField(name = "device_id")
        private String deviceId;
    }

    @Data
    public static class PromotionDetailDto {
        /**
         * 券ID
         */
        @JSONField(name = "coupon_id")
        private String couponId;

        /**
         * 优惠名称
         */
        @JSONField(name = "name")
        private String name;

        /**
         * 优惠范围
         */
        @JSONField(name = "scope")
        private String scope;

        /**
         * 优惠类型
         */
        @JSONField(name = "type")
        private String type;

        /**
         * 优惠券面额
         */
        @JSONField(name = "amount")
        private Integer amount;

        /**
         * 活动ID
         */
        @JSONField(name = "stock_id")
        private Integer stockId;

        /**
         * 微信出资
         */
        @JSONField(name = "wechatpay_contribute")
        private Integer wechatpayContribute;

        /**
         * 商户出资
         */
        @JSONField(name = "merchant_contribute")
        private Integer merchantContribute;

        /**
         * 其他出资
         */
        @JSONField(name = "other_contribute")
        private Integer otherContribute;

        /**
         * 优惠币种
         */
        @JSONField(name = "currency")
        private Integer currency;

        /**
         * 单品列表信息
         */
        @JSONField(name = "goods_detail")
        private List<GoodsDetailDto> goodsDetailList;
    }

    @Data
    public static class GoodsDetailDto {

        /**
         * 商品编码
         */
        @JSONField(name = "goods_id")
        private String goodsId;

        /**
         * 商品数量
         */
        @JSONField(name = "quantity")
        private Integer quantity;

        /**
         * 商品单价，单位为分
         */
        @JSONField(name = "unit_price")
        private Integer unitPrice;

        /**
         * 商品优惠金额
         */
        @JSONField(name = "discount_amount")
        private Integer discountAmount;

        /**
         * 商品备注
         */
        @JSONField(name = "goods_remark")
        private Integer goodsRemark;
    }
}
